mlpfandomcom_ru-20200216-history
Модуль:Тест
local infoboxCharacter = {} --верхний уровень - группа инфобоксов function infoboxCharacter.blockCreate(frame) local args = frame.args --функции --разбиение строки на массив подстрок по определенному символу function split(str, separator, reg) local result = {} --Проверка на образец if (not reg) then regExp = true else regExp = false end --переменные позиций local n local k --управляющие переменные local s = 0 local i = 1 --обработка строки while k ~= str:len() do --поиск сепаратора local substring n, k = str:find(separator, s + 1, regExp) --если поиск не дал результатов if (k nil or n nil) then resulti = str:sub(s + 1, str:len()) break end --если сепаратор найден substring = str:sub(s + 1, n - 1) --добавление результата if substring ~= '' then resulti = substring i = i + 1 end s = k end return result end --проверка параметров function paramCheck(param) if param and param ~= '' then return true else return false end end --создание инфобокса function infoboxCreate(prefix, num) --обработка аргументов local sata = {} --имя if paramCheck(argsprefix..'имя') then data.name = argsprefix..'имя' elseif prefix ~= '' then data.name = prefix:sub(1, prefix:len() - 1) else data.name = tostring(mw.title.getCurrentTitle()) end --цветовая схема --цвет фона if paramCheck(argsфона заголовка') then data.bgColor = argsфона заголовка' else data.bgColor = 'inherit' end --цвет текста if paramCheck(argsтекста заголовка') then data.fontColor = argsтекста заголовка' else data.fontColor = 'transparent' end --цвета data.colorTable = {} if paramCheck(argsprefix..'окрас') then local colors = split(argsprefix..'окрас', '/') data.colorTable+ 1 = {'Окрас', colors} --уточнение цветовой темы if data.bgColor 'inherit' then data.bgColor = colors1 end end if paramCheck(argsгривы') then local colors = split(argsгривы', '/') data.colorTable+ 1 = {'Грива', colors} --уточнение цветовой темы if data.fontColor 'transparent' then data.fontColor = colors1 end end if paramCheck(argsглаз') then local colors = split(argsглаз', '/') data.colorTable+ 1 = {'Глаза', colors} end local ctc = 1 while argsцвет '..ctc do local color = split(argsцвет '..ctc, ':') if color2 then local parsedColor = split(argsглаз', '/') data.colorTable+ 1 = {color1, parsedColor} end ctc = ctc + 1 end --обёртка содержимого local infoboxOuter = mw.html.create('div') infoboxOuter:attr('id', 'infoboxCharacter '..num) --основа инфобокса local infobox = mw.html.create('div') infoboxOuter:addClass('infoboxCharacter') --функции ---------------------------------------------------------- --создание изображений и кнопок (устаревшее) function imageCreateOld(name, dNone) local image = mw.html.create('div') image:addClass('infBlock') if not argsprefix..'подпись' or argsprefix..'подпись' '' then image:css('margin', '6px 0 0 0') end if dNone then image:css('display', 'none') end image:wikitext('[[Файл:'..argsname..'|250px|link=]]') return image end function buttonCreateOld(name) local button = mw.html.create('div') button:addClass('infButton') button:css('color', fontColor) button:css('background', bgColor) button:wikitext(argsname) return button end ------------------------------------------------------------- --создание плашек с информацией о поле и возрасте function kindGenderCreate(text, image) local label = mw.html.create('div') if image then local imgBlock = mw.html.create('div') imgBlock:wikitext('link=') label:css('padding-left', '23px') label:node(imgBlock) else label:css('padding-left', '3px') end label:wikitext(text) return label end --создание строки таблицы function lineCreate(title, text) local line = mw.html.create('tr') local leftColumn = mw.html.create('th') leftColumn:wikitext(title) line:node(leftColumn) local rightColumn = mw.html.create('td') rightColumn:wikitext(text) line:node(rightColumn) return line end --создание пустой сворачивающейся таблицы с заголовком function collapsibleTableCreate(label) local colTable = mw.html.create('table') colTable:addClass('mw-collapsible mw-collapsed') local headerLine = mw.html.create('tr') local header = mw.html.create('th') header:css('background-color', bgColor) header:css('color', fontColor) header:wikitext(label) header:attr('colspan', '6') headerLine:node(header) colTable:node(headerLine) return colTable end --Создание колорбокса function colorBoxCreate(colors, borderColor) local colorBox = mw.html.create('div') colorBox:addClass('infoboxCharacter_colorBox') if (borderColor) then colorBox:css('border', '2px solid '..borderColor) else colorBox:css('border', '1px solid gray') end width = 100 / #colors for i = 1, #colors do local innerElement = mw.html.create('div') innerElement:css('background-color', colorsi) innerElement:css('width', width..'%') innerElement:attr('title', colorsi) colorBox:node(innerElement) end return colorBox end --содержимое --заголовок local header = mw.html.create('div') header:addClass('infoboxCharacter_header') header:css('background-color', data.bgColor) local headerText = mw.html.create('div') headerText:wikitext(vars.name ) headerText:css('color', data.fontColor) header:node(headerText) --титул local title local tText = argsprefix..'подпись' if paramCheck(tText) then title = mw.html.create('div') title:addClass('infoboxCharacter_title') title:wikitext(tText) end ------------------------------ --изображения и кнопки (устаревшие) local imgOld1, imgOld2, imgOld3, imgOld4 if paramCheck(argsprefix..'изображение') then imgOld1 = imageCreateOld(prefix..'изображение') end if paramCheck(argsprefix..'изображение2') then imgOld2 = imageCreateOld('изображение2', true) end if paramCheck(argsprefix..'изображение3') then imgOld3 = imageCreateOld(prefix..'изображение3', true) end if paramCheck(argsprefix..'изображение4') then imgOld4 = imageCreateOld(prefix..'изображение4', true) end local butOld if paramCheck(argsprefix..'изображение2') then butOld = mw.html.create('div') butOld:cssText('width:100%; margin:6px 0 6px; text-align:center') butOld:node(buttonCreateOld(prefix..'подпись1')) butOld:node(buttonCreateOld(prefix..'подпись2')) if paramCheck(argsprefix..'изображение3') then butOld:node(buttonCreateOld(prefix..'подпись3')) end if paramCheck(argsprefix..'изображение4') then butOld:node(buttonCreateOld(prefix..'подпись4')) end end --------------------------- --вид и пол local kindGender if paramCheck(argsprefix..'вид') or paramCheck(argsprefix..'пол') then kindGender = mw.html.create('div') kindGender:addClass('infoboxCharacter_kindGender colorlink') local customKind --вид if paramCheck(argsprefix..'вид') then local kind = mw.html.create('div') local textKind local kindImg if mw.ustring.lower(argsprefix..'вид') 'единорог' then textKind = 'Единорог' kindImg = 'Unicorn picto' elseif mw.ustring.lower(argsprefix..'вид') 'пегас' then textKind = 'Пегас' kindImg = 'Pegasus picto' elseif mw.ustring.lower(argsprefix..'вид') 'земнопони' or mw.ustring.lower(argsprefix..'вид') 'земной пони' or mw.ustring.lower(argsprefix..'вид') 'земная пони' then if argsprefix..'пол' and mw.ustring.lower(mw.ustring.lower(argsprefix..'пол')) 'жен' or mw.ustring.lower(mw.ustring.lower(argsprefix..'пол')) 'женский' then textKind = 'Земная пони' else textKind = 'Земной пони' end kindImg = 'Earthpony picto' elseif mw.ustring.lower(argsprefix..'вид') 'аликорн' then textKind = 'Аликорн' kindImg = 'Alicorn picto' else textKind = argsprefix..'вид' customKind = true end local kind = kindGenderCreate(textKind, kindImg) kindGender:node(kind) end --пол local checkGender if argsprefix..'пол' then checkGender = mw.ustring.lower(argsprefix..'пол') else checkGender = '' end if checkGender 'муж' or checkGender 'мужской' or checkGender 'жен' or checkGender 'женский' then local gender = mw.html.create("div") local genderText local kindImg if checkGender 'муж' or checkGender 'мужской' then if customKind then genderText = 'male' else genderText = 'Жеребец' end genderImg = 'Male picto' else if customKind then genderText = 'female' else genderText = 'Кобыла' end genderImg = 'Female picto' end local gender = kindGenderCreate(genderText, genderImg) kindGender:node(gender) end end --занятие, место проживания, владелец, ареал обитания local infoTable if paramCheck(argsprefix..'занятие') or paramCheck(argsпроживания') or paramCheck(argsprefix..'владелец') or paramCheck(argsобитания') then infoTable = mw.html.create('table') infoTable:addClass('infoboxCharacter_infoTable') if paramCheck(argsprefix..'занятие') then local line = lineCreate('Занятие', argsprefix..'занятие') infoTable:node(line) end if paramCheck(argsпроживания') then local line = lineCreate('Место проживания', argsпроживания') infoTable:node(line) end if paramCheck(argsprefix..'владелец') then local line = lineCreate('Владелец', argsprefix..'владелец') infoTable:node(line) end if paramCheck(argsобитания') then local line = lineCreate('Ареал обитания', argsобитания') infoTable:node(line) end end --озвучка local voiceTable if paramCheck(argsозвучка') or paramCheck(argsозвучка') or paramCheck(argsозвучка песен') or paramCheck(argsозвучка песен') then voiceTable = collapsibleTableCreate('Озвучка') voiceTable:addClass('infoboxCharacter_collapsibleInfoTable') if paramCheck(argsозвучка') then local line = lineCreate('Русская', argsозвучка') voiceTable:node(line) end if paramCheck(argsозвучка') then local line = lineCreate('Оригинальная', argsозвучка') voiceTable:node(line) end if paramCheck(argsозвучка песен') then local line = lineCreate('Русская песен', argsозвучка песен') voiceTable:node(line) end if paramCheck(argsозвучка песен') then local line = lineCreate('Оригинальная песен', argsозвучка песен') voiceTable:node(line) end end --родственники local relativesTable if paramCheck(args1') then relativesTable = collapsibleTableCreate('Родственники') relativesTable:addClass('infoboxCharacter_collapsibleInfoTable') local rtc = 1 while paramCheck(args'..rtc) do local relative = split(args'..rtc, ':') if relative2 then local line = lineCreate(relative1, relative2) relativesTable:node(line) end rtc = rtc + 1 end end --внешний вид local appearanceTable if data.colorTable1 or paramCheck(argsprefix..'метка') or paramCheck(argsметки') then appearanceTable = collapsibleTableCreate('Внешний вид') appearanceTable:addClass('infoboxCharacter_collapsibleAppearanceTable') --цвета if data.colorTable1 then local length = #data.colorTable local colspan local tr for i = 1, length do if length - i 1 and length % 3 2 then colspan = '3' elseif length - i 0 and length % 3 1 then colspan = '6' else colspan = '2' end if i % 3 1 then tr = mw.html.create('tr') end local th = mw.html.create('th') th:attr('colspan', colspan) th:wikitext(data.colorTablei1..' ') local colorBox = colorBoxCreate(data.colorTablei2) th:node(colorBox) tr:node(th) if (i % 3 0 or length - i 0) then appearanceTable:node(tr) end end end --метка if paramCheck(argsprefix..'метка') or paramCheck(argsметки') then local commonTr = mw.html.create("tr") local commonTd = mw.html.create("td") local th commonTd:attr("colspan", "6") commonTd:css("text-align", "center") local cutieMark = mw.html.create("table") local tr = mw.html.create("tr") if paramCheck(argsметки") then local cutieMarkDescription = mw.html.create("td") if paramCheck(argsprefix.."метка") then cutieMarkDescription:css("text-align", "right") cutieMarkDescription:wikitext("Метка "..argsметки") else th = mw.html.create("th") th:wikitext("Метка") cutieMarkDescription:wikitext(argsметки") end tr:node(cutieMarkDescription) end if paramCheck(argsprefix.."метка") then local cmSize if paramCheck(argsметки') then cmSize = argsметки' else cmSize = '38x38px' end local td = mw.html.create("td") local cutieMarkImage = mw.html.create("div") cutieMarkImage:wikitext("[[файл:"..args"метка".."|"..cmSize.."|link=]]") local cmBackground if paramCheck(argsметки") then cmBackground = split(argsметки", '/' ) --else -- cmBackground = split(argsметки", '/' ) end cutieMarkImage:css("background-color", cmBackground1) if argsметки" "" then th = mw.html.create("th") th:wikitext("Метка") else cutieMarkImage:css("margin-left", "10px") end td:node(cutieMarkImage) tr:node(td) end if (th ~= nil) then local firstTr = mw.html.create("tr") firstTr:node(th) cutieMark:node(firstTr) end cutieMark:node(tr) commonTd:node(cutieMark) commonTr:node(commonTd) appearanceTable:node(commonTr) end end --галерея local gallery if args'галерея' ~= '' then gallery = mw.html.create('div') gallery:addClass('infoboxCharacter_gallery colorlink') gallery:css('color', fontColor) gallery:css('background-color', bgColor) gallery:wikitext(args'галерея') end --построение infobox:node(header) if title then infobox:node(title) end ---------------------------------- --изображения и кнопки (устаревшие) if imgOld1 then infobox:node(imgOld1) end if imgOld2 then infobox:node(imgOld2) end if imgOld3 then infobox:node(imgOld3) end if imgOld4 then infobox:node(imgOld4) end if butOld then infobox:node(butOld) end ------------------------------- if kindGender then infobox:node(kindGender) end if infoTable then infobox:node(infoTable) end if voiceTable then infobox:node(voiceTable) end if relativesTable then infobox:node(relativesTable) end if appearanceTable then infobox:node(appearanceTable) end if gallery then infobox:node(gallery) end infoboxOuter:node(infobox) return infoboxOuter end --обёртка блока инфобоксов local infoboxGroup = mw.html.create('div') --infoboxGroup:attr('id', 'infoboxCharacterGroup') --создание инфобоксов if args1' then local ibc = 1 while args'..ibc do local infobox = infoboxCreate(args'..ibc..' ', ibc) infoboxGroup:node(infobox) rbc = ibc + 1 end else local infobox = infoboxCreate('', 1) infoboxGroup:node(infobox) end return infoboxGroup end return infoboxCharacter